package main

//导入所需要的库，这个库是golang的基础库，所以可以直接使用，但如果到了现实工作中，经常需要使用网络上的库，就需要使用go mod命令来批量从网络上拉取了
import (
	"fmt"
	"reflect"
	"strconv"
	"strings"
)

//如何传递参数（在这个方法中使用其他地方的获得的数据）
func test3(a int) {
	fmt.Println("来看看是否把a作为参数传进来了，a:", a)
}

//传递多个参数
func test4(a int, b string, c bool) {
	fmt.Println("a: ", a, "b: ", b, "c: ", c)				//需要按方法中设定的顺序传入，否则会导致数据错乱或报错
}

//如何输入参数，如果是作为服务器后端项目使用，好像通常不需要这个方法，但是这个方法在学编程的过程中是非常好用的
func test5() {
	var a string
	fmt.Print("请输入:")				//fmt.Print()该方法与fmt.Println()不同的地方在于，这个函数结束的时候不换行
	fmt.Scanf("%s",&a)			//输入语法，输入一个字符串，赋值给a变量，%s表示字符串，%d表示整型，其他类型上网查，我忘了
										//运行到这时，需要在屏幕下方的命令行中输入字符并回车确认
	fmt.Println("输入的内容为", a)
}

//如何返回数据，最重要的功能之一
func test6() (a int) {					//第二个括号内就是要返回的参数，并且这个a相当于已经被声明了，那么就不能在这个方法下重新声明一个叫a的变量了
	a = 10
	b := 100
	fmt.Println(b)						//因为b必须至少被使用一次，否则会报错，所以我蛮写了个print使用一下b
	return 								//通过return把 a 的值返回回去，这里就不一定非得写return a，因为在方法中已经明确返回的是a这个变量的值了
}

//返回数据的不同写法
func test7() (int, string) {			//这里没有指定返回某个变量
	a := 10
	b := "100"
	c := 100
	d := true
	fmt.Println(c, d)
	return a, b							//由于没有指定返回某个变量的值，所以必须写return a, b来确保返回的是a和b
}

//字符串的切分
func test8() {
	a := "aaa,bbb,ccc,ddd"
	b := strings.Split(a,",")						//这个方法把a按第二个参数也就是以逗号","为分割符，将一个字符串切割成多个字符串
	fmt.Println("切割完的效果是这样的：", b)			//打印b这个变量的内容，看看效果，方便理解
}

//字符串的合并
func test9() {
	arr := []string{"a","b"}							//声明一个字符串数组arr，并且赋值两个元素
	fmt.Println(arr)									//先打印看看字符串内容
	justString := strings.Join(arr," ")			//这个方法的作用是拼接字符串
	fmt.Println(justString)								//来看看拼接后的结果
}

//强制类型转换（常用）
func test10()  {
	a := 10
	var str string
	var u uint
	var i int
	var err error
	var f float32

	//int转uint
	u = uint(a)
	fmt.Println("转uint：", u, "类型：", reflect.TypeOf(u))			//reflect.TypeOf()方法是用来查看变量类型的，通过这个方法可以知道变量是什么类型的

	//int转string
	str = strconv.Itoa(a)								//转string是一个比较特殊的方法，不同于一般的类型转换，这个是golang的问题
	fmt.Println("int转string：", str, "类型：", reflect.TypeOf(str))

	//string转int
	i, err  = strconv.Atoi(str)							//这个err是方法自带的返回值，由于出现转换失败的时候查找失败原因，比如把字母放进去转就会报错
	fmt.Println("string转int：", i , "类型：", reflect.TypeOf(i))
	doNoting(err)						//这个方法不要在意，我用来确保每个变量都被使用过，避免报错用的

	//int转float
	f = float32(a)
	fmt.Println("int转float：", f , "类型：", reflect.TypeOf(f))

	//float转int
	i = int(f)
	fmt.Println("float转int：", i , "类型：", reflect.TypeOf(i))

}































